<?php
namespace Swiftx\Component\DataBase;

/**
 * 创建一个Manager对象
 * @package Swiftx\Interfaces\Orm
 */
class Column {

    /**
     * 字段名称
     * @var string
     */
    protected $name;

    /**
     * 数据类型
     * @var string
     */
    protected $type;

    /**
     * 是否主键
     * @var bool
     */
    protected $primary = false;

    /**
     * 无符号
     * @var bool
     */
    protected $unsigned = false;

    /**
     * 设置非空
     * @var bool
     */
    protected $noNull = false;

    /**
     * 自动递增
     * @var bool
     */
    protected $autoIncrement = false;

    /**
     * 设置默认
     * @var mixed
     */
    protected $default = null;

    /**
     * 设置默认值
     * @var string
     */
    protected $comment = null;

    /**
     * 设置字段
     * @param string $value
     */
    public function setName(string $value){
        $this->name = $value;
    }

    /**
     * 读取字段
     * @return string
     */
    public function getName():string {
        return $this->name;
    }

    /**
     * 设置数据类型
     * @param string $value
     */
    public function setType(string $value){
        $this->type = $value;
    }

    /**
     * 设置为主键
     * @param bool $value
     */
    public function setPrimary(bool $value){
        $this->primary = $value;
    }

    /**
     * 是否为主键
     * @return bool
     */
    public function isPrimary():bool {
        return $this->primary;
    }

    /**
     * 设置无符号类型
     * @param bool $value
     */
    public function setUnsigned(bool $value){
        $this->unsigned = $value;
    }

    /**
     * 设置非空
     * @param bool $value
     */
    public function setNoNull(bool $value){
        $this->noNull = $value;
    }

    /**
     * 设置自动递增
     * @param bool $value
     */
    public function setAutoIncrement(bool $value){
        $this->autoIncrement = $value;
    }

    /**
     * 设置默认值
     * @param string $value
     */
    public function setDefault(string $value){
        $this->default = $value;
    }

    /**
     * 设置备注
     * @param string $value
     */
    public function setComment(string $value){
        $this->comment = $value;
    }

    /**
     * 字段特征
     * @return string
     */
    public function getSchema():string {
        $result = $this->name.' '.$this->type;
        if($this->unsigned) $result .= ' UNSIGNED';
        if($this->noNull) $result .= ' NOT NULL';
        if($this->autoIncrement) $result .= ' AUTO_INCREMENT';
        if($this->default) $result .= ' DEFAULT \''.$this->default.'\'';
        if($this->comment) $result .= ' COMMENT \''.$this->comment.'\'';
        return $result;
    }

}